package com.stx.test.jdbc;

import java.sql.*;

/**
 * packageName com.stx.test.jdbc
 *
 * @author YangYi
 * @className Demo01
 * @date 2025/10/10
 * @description TODO
 */
public class JdbcConnectionDemo01 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 第一步:获取驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 第二步:创建连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myuser?useSSL=false&serverTimezone=UTC", "root", "admin");
        System.out.println("连接成功");
        // 第三步:创建 Statement 对象
        // 方式1:创建基本的Statement（有SQL注入风险，不推荐用于参数查询）
        Statement statement = connection.createStatement();
//        // 方式2：创建PreparedStatement（推荐！可预编译，防止SQL注入）
//        String sql = "SELECT * FROM stuser WHERE id = ? AND name = ?";
//        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        // 第四步:执行sql语句
        ResultSet resultSet = statement.executeQuery("select * from stuser");
        // 执行更新（INSERT, UPDATE, DELETE），返回受影响的行数
//        String updateSql = "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')";
//        int rowsAffected = statement.executeUpdate(updateSql);

        // 使用PreparedStatement设置参数并执行
//        preparedStatement.setInt(1, 1); // 设置第一个参数（id）为1
//        preparedStatement.setString(2, "Alice"); // 设置第二个参数（name）为"Alice"
//        ResultSet rs = statement.executeQuery(); // 注意：这里不需要再传入sql字符串
        // 第五步:处理结果集
        while(resultSet.next()){
            int id = resultSet.getInt("id");// 通过列名获取int值
            String name = resultSet.getString("name"); // 通过列名获取String值
            String email = resultSet.getString("email");
            String password = resultSet.getString("password");
            System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email
                    + ", Password: " + password);
            // 也可以通过列的索引来获取（从1开始）
            // int id = resultSet.getInt(1);
            // String name = resultSet.getString(2);
        }
        // 第六步:关闭资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
